#include "Python.h" //包含Python.h文件，该文件包含Python API的头文件

int main()
{
    Py_Initialize(); // 初始化Python解释器

    // 将当前路径添加到sys.path列表中
    PyObject *sys = PyImport_ImportModule("sys");         // 导入sys模块
    PyObject *path = PyObject_GetAttrString(sys, "path"); // 获取sys.path属性
    PyList_Append(path, PyUnicode_FromString("."));       // 添加当前路径到sys.path列表中

    // 导入模块
    PyObject *module = PyImport_ImportModule("Python_printStr"); // 导入Python_print模块
    if (module == NULL)
    {
        PyErr_Print();                           // 打印错误信息
        printf("加载Python_printStr模块失败\n"); // 输出错误信息
        return 1;                                // 返回1表示失败
    }

    // 获取print_Python对象
    PyObject *pfunc = PyObject_GetAttrString(module, "print_String"); // 获取print_String函数
    if (pfunc == NULL || !PyCallable_Check(pfunc))
    {                                         // 判断print_String对象是否可调用
        PyErr_Print();                        // 打印错误信息
        printf("获取print_String对象失败\n"); // 输出错误信息
        return 1;                             // 返回1表示失败
    }

    // 创建一个字符串作为参数传递给print_String函数
    char *str = "chenlichen handsome";           // 定义字符串
    PyObject *pArgs = Py_BuildValue("(s)", str); // 创建字符串参数

    // 调用print_String函数并获取返回值
    PyObject *pValue = PyObject_CallObject(pfunc, pArgs); // 调用print_String函数
    if (pValue == NULL)
    {
        PyErr_Print();                        // 打印错误信息
        printf("调用print_String函数失败\n"); // 输出错误信息
        return 1;                             // 返回1表示失败
    }

    // 将返回值转换成C类型并输出
    char *result = NULL; // 定义C字符串变量

    if (PyArg_Parse(pValue, "s", &result) == 0)
    {                                                   // 将返回值转换成C类型
        PyErr_Print();                                  // 打印错误信息
        printf("调用print_String函数返回值转换失败\n"); // 输出错误信息
        return 1;                                       // 返回1表示失败
    } // 将返回值转换成C类型
    printf("调用print_String函数返回值：%s\n", result); // 输出返回值

    // 释放所有引用的Python对象
    Py_DECREF(pValue); // 释放返回值引用
    Py_DECREF(pfunc);  // 释放函数引用
    Py_DECREF(module); // 释放模块引用

    // 关闭Python解释器
    Py_Finalize(); // 关闭Python解释器
    return 0;
}
